知识点名称:Bmob后端云数据操作

编号: K13-4

前驱知识点编号:K13-1

作者:

讲义内容:

1、添加数据

添加数据使用BmobObject对象的save方法,就可以将当前对象的内容保存到Bmob服务端。

例如,你现在要保存一条游戏分数的记录,代码如下:

GameScore gameScore = new GameScore();
//注意:不能调用gameScore.setObjectId("")方法
gameScore.setPlayerName("比目");
gameScore.setScore(89);
gameScore.setIsPay(false);
gameScore.save(new SaveListener<String>() {

    @Override
    public void done(String objectId, BmobException e) {
        if(e==null){
            toast("创建数据成功:" + objectId);
        }else{
            Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
        }
    }
})

运行以上代码,如果添加成功,你可以在Bmob提供的后台的数据浏览中看到类似这样的结果:

objectId: "0c6db13c", score: 89, playerName: "比目", isPay: false,createdAt:"2013-09-27 10:32:54", updatedAt:"2013-09-27 10:32:54"

2、删除数据

从服务器删除对象。例如:将GameScore表中objectId为dd8e6aff28的数据删除。

GameScore gameScore = new GameScore();
gameScore.setObjectId("dd8e6aff28");
gameScore.delete(new UpdateListener() {

    @Override
    public void done(BmobException e) {
        if(e==null){
            Log.i("bmob","成功");
        }else{
            Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
        }
    }
});

3、修改数据

更新一个对象也是非常简单。例如:将GameScore表中objectId为0c6db13c的游戏分数修改为77.

GameScore gameScore = new GameScore();
gameScore.setScore(77);
gameScore.update("0c6db13c", new UpdateListener() {

    @Override
    public void done(BmobException e) {
        if(e==null){
            Log.i("bmob","更新成功");
        }else{
            Log.i("bmob","更新失败:"+e.getMessage()+","+e.getErrorCode());
        }
    }
});

自V3.4.4版本开始,SDK提供了另一种方法来更新数据,通过调用Bmobobject类中的setValue(key,value)方法,只需要传入key及想要更新的值即可

举例,说明如下:

public class Person extends BmobObject {
    private BmobUser user;    //BmobObject类型
    private BankCard cards;    //Object类型
    private Integer age;    //Integer类型
    private Boolean gender; //Boolean类型
    ...
    getter、setter方法
}

其中BankCard类结构如下:

public class BankCard{
    private String cardNumber;
    private String bankName;
    public BankCard(String bankName, String cardNumber){
        this.bankName = bankName;
        this.cardNumber = cardNumber;
    }
    ...
    getter、setter方法
}
Person p2=new Person();
//更新BmobObject的值
//    p2.setValue("user", BmobUser.getCurrentUser(this, MyUser.class));
//更新Object对象
p2.setValue("bankCard",new BankCard("农行", "农行账号"));
//更新Object对象的值
//p2.setValue("bankCard.bankName","建行");
//更新Integer类型
//p2.setValue("age",11);
//更新Boolean类型
//p2.setValue("gender", true);
p2.update(objectId, new UpdateListener() {

    @Override
    public void done(BmobException e) {
        if(e==null){
            Log.i("bmob","更新成功");
        }else{
            Log.i("bmob","更新失败:"+e.getMessage()+","+e.getErrorCode());
        }
    }

});

4、查询数据

数据的查询可能是每个应用都会频繁使用到的,BmobSDK中提供了BmobQuery类,它提供了多样的方法来实现不同条件的查询,同时它的使用也是非常的简单和方便的。

查询单条数据

当我们知道某条数据的objectId时,就可以根据objectId直接获取单条数据对象。例如:查询objectId为a203eba875的人员信息。

BmobQuery<GameScore> query = new BmobQuery<GameScore>();
query.getObject("a203eba875", new QueryListener<GameScore>() {

    @Override
    public void done(GameScore object, BmobException e) {
        if(e==null){
            //获得playerName的信息
            object.getPlayerName();
            //获得数据的objectId信息
            object.getObjectId();
            //获得createdAt数据创建时间(注意是:createdAt,不是createAt)
            object.getCreatedAt();
        }else{
            Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
        }
    }

});

查询多条数据

查询某个数据表中的所有数据是非常简单的查询操作,例如:查询GameScore表中playerName为“比目”的50条数据记录。

BmobQuery<GameScore> query = new BmobQuery<GameScore>();
//查询playerName叫“比目”的数据
query.addWhereEqualTo("playerName", "比目");
//返回50条数据,如果不加上这条语句,默认返回10条数据
query.setLimit(50);
//执行查询方法
query.findObjects(new FindListener<GameScore>() {
    @Override
    public void done(List<GameScore> object, BmobException e) {
        if(e==null){
            toast("查询成功:共"+object.size()+"条数据。");
            for (GameScore gameScore : object) {
               //获得playerName的信息
               gameScore.getPlayerName();
               //获得数据的objectId信息
               gameScore.getObjectId();
               //获得createdAt数据创建时间(注意是:createdAt,不是createAt)
               gameScore.getCreatedAt();
            }
        }else{
            Log.i("bmob","失败:"+e.getMessage()+","+e.getErrorCode());
        }
    }
});

查询的结果不需要进行任何处理,BmobSDK已经封装成相应的JavaBean集合了,直接使用即可。

results matching ""

    No results matching ""